package com.example.job;

import com.example.service.IBarCodesService;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author LDD
 * @version 1.0
 * @description: 定时器任务执行
 * @date 2023/5/29
 */
/*@Scheduled注解可以控制方法定时执行，其中有三个参数可选择：
1、fixedDelay控制方法执行的间隔时间，是以上一次方法执行完开始算起，如上一次方法执行阻塞住了，那么直到上一次执行完，并间隔给定的时间后，执行下一次。
2、fixedRate是按照一定的速率执行，是从上一次方法执行开始的时间算起，如果上一次方法阻塞住了，下一次也是不会执行，但是在阻塞这段时间内累计应该执行的次数，当不再阻塞时，一下子把这些全部执行掉，而后再按照固定速率继续执行。
3、cron表达式可以定制化执行任务，但是执行的方式是与fixedDelay相近的，也是会按照上一次方法结束时间开始算起。
4、initialDelay 。如： @Scheduled(initialDelay = 10000,fixedRate = 15000
             这个定时器就是在上一个的基础上加了一个initialDelay = 10000 意思就是在容器启动后,延迟10秒后再执行一次定时器,以后每15秒再执行一次该定时器。*/

@Service
public class DataMigration {

    @Resource
    private IBarCodesService iBarCodesService;

    /**
     * @Description bar_codes表数据迁移到bar_codes_history中 每月最后一天做一次数据迁移：0 0 23 L * ?
     * @MethodName BarCodesDataMigration
     * @Date 15:01 2024/5/13
     */
    //@Scheduled(cron = "0/5 * * * * *")
    public void BarCodesDataMigration() {
        boolean b;

        do {
            b = iBarCodesService.selectBarCodes();
        } while (b);

        System.out.println("开始执行任务" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }
}
